package pe.edu.unmsm.fisi.sisconteg.view.controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;

import org.primefaces.model.chart.CartesianChartModel;
import org.primefaces.model.chart.ChartSeries;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import pe.edu.unmsm.fisi.sisconteg.domain.model.Egresado;

@ManagedBean
@Scope("view")
@Controller
public class ReporteController implements Serializable{

	private String prueba;
	private CartesianChartModel categoryModel; 
	private List<Egresado> egresados;
	private List<Integer> anios;
	public ReporteController() {
		setPrueba("aqui va el grafico en primefaces");
	}
	
	@PostConstruct
	private void init(){
		setEgresados((List<Egresado>) FacesContext.getCurrentInstance()
				.getExternalContext().getSessionMap().get("listResultadosConsulta"));
		System.out.println("total egresados: "+getEgresados().size());
        setAnios(obtenerAnios());
        
		categoryModel = new CartesianChartModel();  
        
        ChartSeries egresados = new ChartSeries();  
        ChartSeries egresadas = new ChartSeries();
        egresados.setLabel("Hombres");
        egresadas.setLabel("Mujeres");
        for (Integer anio : getAnios()) {
			egresados.set(anio+"", obtenerTotalxAnioySex("Hombre", anio));
			egresadas.set(anio+"", obtenerTotalxAnioySex("Mujer", anio));
		}
  
        categoryModel.addSeries(egresados);
        categoryModel.addSeries(egresadas);
	}

	private Integer obtenerTotalxAnioySex(String sexo, Integer anio) {

		Integer count=0;
		for (Egresado egresado : egresados) {
			if(egresado.getSexo().equals(sexo) && egresado.getAnioEgreso().equals(anio))
				count++;
		}

		return count;
	}

	private List<Integer> obtenerAnios() {
		List<Integer> lanio=new ArrayList<Integer>();
		for (Egresado egresado : getEgresados()) {
			int band=0;
			for (Integer integer : lanio) {
				if(egresado.getAnioEgreso().equals(integer))
					band=1;
			}
			if (band==0)
				lanio.add(egresado.getAnioEgreso());	
		}
		return lanio;
	}

	public String getPrueba() {
		return prueba;
	}

	public void setPrueba(String prueba) {
		this.prueba = prueba;
	}

	public CartesianChartModel getCategoryModel() {
		return categoryModel;
	}

	public void setCategoryModel(CartesianChartModel categoryModel) {
		this.categoryModel = categoryModel;
	}

	public List<Egresado> getEgresados() {
		return egresados;
	}

	public void setEgresados(List<Egresado> egresados) {
		this.egresados = egresados;
	}

	public List<Integer> getAnios() {
		return anios;
	}

	public void setAnios(List<Integer> anios) {
		this.anios = anios;
	}
	
}
